package com.tm.test;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;

/**
 * @author Rocky
 * @create 2022-10-11 17:15
 * (2) 异步发送：
 * 一条消息发送，发送方不用等服务端返回响应，接着直接发送吓一跳消息。
 * 发送方通过一个回调接口接收服务端的响应。
 * 应用场景：一般用于耗时较长的，响应时间却很敏感的业务场景。例如：用户上传身份信息，通过后台人工智能进行验证，验证时间较长，此时可以先告知用户身份信息已推送成功，完成验证之后返回结果。
 */
public class RocketMQTest2 {
    //发送异步消息
    public static void main(String[] args) throws Exception {
        //创建producer对象
        DefaultMQProducer producer = new DefaultMQProducer("tmGoodsGroup");
        //创建nameServer
        producer.setNamesrvAddr("192.168.0.3:9876");
        //启动
        producer.start();
        String a = "{'goodsId':1234,'goodsName':'纽曼34','goodsPrice':'889'}";
        //创建消息
        Message message = new Message("goods","updateGoods",a.getBytes());
        //异步消息的发送
        producer.send(message, new SendCallback() {
            //成功回调函数
            @Override
            public void onSuccess(SendResult sendResult) {
                System.out.println(sendResult);
            }

            //失败回调函数
            @Override
            public void onException(Throwable throwable) {
                throwable.printStackTrace();
            }
        });
        System.out.println("照走不误");
        //不要在这里关闭producer
    }

}
